從上一章節中,我們已經將實驗與教學的環境給建置起來了,在這一章節中,將會演示使用「workstation」之虛擬主機來存取終端機的方法以及基本的Bash shell之介紹。
首先,先打開VirtualBox,接著選取「workstation」後,按下啟動的按鈕,就可以把這台虛擬機器給啟動了,相關的操作畫面如下圖所示:
接著會顯示登入畫面,如下圖所示:
從上面的登入畫面可以得知,使用者為:rockylinux,點擊下去之後,要輸入密碼,密碼為:rocky,輸入完密碼按下「enter」鍵之後,就可以登入到桌面環境了,相關的操作圖示如下所示:
Bash全名叫做「GNU Bourne-Again Shell」,將這個Bash之shell呼叫出來的方式如下:登入進去到桌面之後,可以執行一個終端機,在Rocky Linux這個Linux發行版本底下預設執行shell為Bash,可以點桌面上方的「Activities」,並會得到下面的圖示:
接著選擇畫面左邊的黑色圖示,從下面數來第二個,這個圖示就是開啟終端機的圖示,點擊下去之後,就會打開終端機,並啟動互動式模式的Bash shell了,相關的操作如下圖所示:
從上述的操作,就可以把一個終端機給呼叫出來了,接著會有一個文字,如下所示:
[rockylinux@workstation ~]$
從上面這一行的文字來看,rockylinux
指的是登入的使用者名稱,而中間用小老鼠隔開,後面指的是這台主機的名稱,像以這台主機為例,就叫做workstation,而~
則是目前停在的目錄,這在Bash shell的世界中,這個代表的是當前使用者的家目錄路徑,而$
是這個結尾的意思,後面開始的地方就是我們可以輸入指令的地方了。
成功登入了桌面環境以及打開了終端機之後,我們也可以進行登出本地端的主機,由於我們有安裝桌面環境的緣故,因此當輸入了「exit」指令時,只會把當前所開啟的終端機給關閉,桌面環境所執行的shell還是在登入的狀態,若要回到原來前面小節中,一開始在使用者的登入狀態的話,需要關閉終端機之後,按下右上角的電源鍵之圖示並選擇使用者名稱選項,點下去之後,有一個「log out」選項,按下去之後,才會回到先前一開始使用者登入圖示的畫面,相關的圖示如下圖所示:
回到桌面環境,這是一個叫做GNOME之桌面環境,這個桌面環境也是一種廣為流行的桌面環境,有了桌面環境就可以有圖示之外,還可以選擇圖形化的應用程式出來,像是前面小節中所提到的終端機就是桌面圖形化程式的其中一種,而我們可以照著下圖所示,點擊左邊的最後一個選項,叫做「show applications」,就會把所有在這台主機上所安裝的圖形化應用程式都列出來,有點類似像Windows作業系統上的應用程式集,相關的操作如下圖所示:
利用上面小節中所提到的終端機開啟的方法,將終端機打開之後,輸入「whoami」之指令,可以得到下面的文字:
[rockylinux@localhost ~]$ whoami
rockylinux
[rockylinux@localhost ~]$
上述的指令是查看當前使用者名稱,接著,輸入「date」則可以跳出當前的時間的字串,相關的輸出如下所示:
[rockylinux@localhost ~]$ date
Sun Sep 19 21:01:12 CST 2021
[rockylinux@localhost ~]$
如果要顯示目前的時間並以「時:分」之格式來表示的話,輸出的結果如下所示:
[rockylinux@localhost ~]$ date +%R
21:02
[rockylinux@localhost ~]$
[rockylinux@localhost ~]$
而「+%R」是一個格式化日期字串之參數,顯示出來就是我們上面所要格式的結果,表示的時分字串是以24小時制,而使用「+%x」之格式化選項,則是會輸出:「月/日/年」之格式化日期字串。
[rockylinux@localhost ~]$ date +%x
09/19/2021
有關於「date」指令所用到的日期之格式化字串選項還有很多,如「%F」、「+%Y」、「+%m」以及「+%d」等,要看一個指令的用法或是相觀的說明將會在後面的章節中提到,這個章節只要會基本的操作指令輸入即可。
接著再介紹一個指令叫做「passwd」,這個指令是用來修改當前的使用者密碼的,當我們執行這個指令下去的時候,就會得到下面的輸出文字:
[rockylinux@localhost ~]$ passwd
Changing password for user rockylinux.
Current password:
接著就會要求輸入當前使用者的密碼,當成功的輸入當前這個使用者密碼之後,就會要求輸入新的密碼,接著就會得到下列的文字:
[rockylinux@localhost ~]$ passwd
Changing password for user rockylinux.
Current password:
New password:
當輸入新的密碼之後,則會輸入下列的文字:
[rockylinux@localhost ~]$ passwd
Changing password for user rockylinux.
Current password:
New password:
Retype new password:
從上面的輸出文字來看,會再要求再輸入一次密碼,當兩次輸入的密碼都相同之後,則當前的使用者修改密就算成功了,整個成功的修改密碼過程之輸出文字如下所示:
[rockylinux@localhost ~]$ passwd
Changing password for user rockylinux.
Current password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
有時候,當設定新的密碼太簡單的話,則會出現下列的錯誤:
[rockylinux@localhost ~]$ passwd
Changing password for user rockylinux.
Current password:
New password:
BAD PASSWORD: The password is shorter than 8 characters
passwd: Authentication token manipulation error
從上面的輸出文字得知,就是密碼設定的長度太短,沒有到8個字元,因此不允許修改此過短的密碼,但是若要設定這個密碼也是可以的,可以用root使用者,或是當前使用者有使用「sudo」權限的話,也可以做到,這部分在後面的章節會再提到。
所有的使用者與相對應的密碼都會存在檔案裏面,存在的路徑為:「/etc/passwd」這個路徑底下,可以用「cat」這個指令將此密碼檔案給印出來到終端機上面,相關的輸出文字如下所示:
[rockylinux@localhost ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pipewire:x:996:992:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
libstoragemgmt:x:995:989:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
clevis:x:994:988:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
unbound:x:993:987:Unbound DNS resolver:/etc/unbound:/sbin/nologin
gluster:x:992:986:GlusterFS daemons:/run/gluster:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
setroubleshoot:x:991:984::/var/lib/setroubleshoot:/sbin/nologin
saslauth:x:990:76:Saslauthd user:/run/saslauthd:/sbin/nologin
dnsmasq:x:983:983:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
sssd:x:982:982:User for sssd:/:/sbin/nologin
cockpit-ws:x:981:980:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:x:980:979:User for cockpit-ws instances:/nonexisting:/sbin/nologin
chrony:x:979:978::/var/lib/chrony:/sbin/nologin
flatpak:x:978:977:User for flatpak system helper:/:/sbin/nologin
colord:x:977:976:User for colord:/var/lib/colord:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rockylinux:x:1000:1000:rockylinux:/home/rockylinux:/bin/bash
[rockylinux@localhost ~]$
從上述的密碼檔案來看,內容除了記錄使用者的資訊之外,還有使用者對應的家目錄路徑、使用者id等資訊,此檔案的資訊解讀在後面的章節也會提到,有鑑於用cat /etc/passwd
這個指令會把密碼檔案所有內容都印出來,若要此檔案內容的前幾行要怎麼做?這時我們可以使用「head」這個指令來做到,相關指令輸出的結果如下:
[rockylinux@localhost ~]$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
從上述的指令來看,head預設會印出指定檔案之前10行內容出來,若要印出更少行或更多行,則可以使用「-n」選項做到,例如:「head -n 5 /etc/passwd」,接著就會得到下列的輸出結果:
[rockylinux@localhost ~]$ head -n 5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
有印出檔案前幾行的內容,當然也有印出檔案內容後面幾行的內容之指令,那就是「tail」,使用這個tail指令與head指令相仿,什麼參數都沒有加上去的話,則印出檔案內容中最後10行的內容,若要指定印出最後幾行,則可以使用「-n」之參數做到。
指令參數有時候很多,不是人可以記得起來的,這時可以使用TAB按鍵來做到,以tail這個指令來說,可以這樣做:
[rockylinux@localhost ~]$ tail
.bash_history .bashrc Desktop/ .esd_auth .mozilla/ .pki/ Videos/
.bash_logout .cache/ Documents/ .ICEauthority Music/ Public/
.bash_profile .config/ Downloads/ .local/ Pictures/ Templates/
從上述輸出的文字,當指輸入tail指令並按下TAB鍵時,則會跳出所有路徑選項,因為要接上檔案的路徑,或是打上一個「-」並按下TAB則會再跳出「-」,接著按兩下TAB鍵,則會跳出所有可能的長選項供使用者所使用,相關的輸出指令如下所示:
[rockylinux@localhost ~]$ tail --
--bytes= --lines= --silent --zero-terminated
--follow --max-unchanged-stats= --sleep-interval=
--follow= --pid= --verbose
--help --retry --version
假設要印出/etc/passwd檔案裏面之前5行則可以使用長選項之「--lines」或是短選項的「-n」來做到,相關輸出文字如下所示:
[rockylinux@localhost ~]$ tail --lines=5 /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rockylinux:x:1000:1000:rockylinux:/home/rockylinux:/bin/bash
[rockylinux@localhost ~]$ tail -n 5 /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rockylinux:x:1000:1000:rockylinux:/home/rockylinux:/bin/bash
TAB按鍵是一個很實用的按鍵,尤其當使用不知道指令有什麼選項參數可以選用的時候,可以透過這按鍵將所有情況的選項列出,供使用者做選擇。
當打了很多指令之後,需要將之前打過的指令歷史列出,則可以使用「history」來做到,相關輸出的文字如下所示:
[rockylinux@localhost ~]$ history
1 ls /home/
2 ip a show
3 sudo reboot
4 whoami
5 date
6 date +%R
7 date +%X
8 date +%x
9 date +%d
10 date +%F
11 who
12 date +%F
13 date +%f
14 date +%Y
15 date +%M
16 date +%m
17 date +%d
18 passwd
19 cat /etc/passwd
20 head /etc/passwd
21 head -n 5 /etc/passwd
22 tail /etc/passwd
23 tail --lines=1 /etc/passwd
24 tail --lines=5 /etc/passwd
25 tail -n 5 /etc/passwd
26 history
當我們要用上面列出來之第25行指令再執行一次時,可以使用「!25」來做到,相關輸出如下所示:
[rockylinux@localhost ~]$ !25
tail -n 5 /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rockylinux:x:1000:1000:rockylinux:/home/rockylinux:/bin/bash
當指令一多的時候,難免會有打錯的可能,為了要更方便的編輯指令,以下介紹幾個實用的組合鍵可以做到編輯指令的方法: